
/**
 * 
 * 用户调度问题
 * 
 * 题目描述

在通信系统中，一个常见的问题是对用户进行不同策略的调度，会得到不同的系统消耗和性能。

假设当前有n个待串行调度用户，每个用户可以使用A/B/C三种不同的调度策略，不同的策略会消耗不同的系统资源。请你根据如下规则进行用户调度，并返回总的消耗资源数。

规则：

相邻的用户不能使用相同的调度策略，例如，第1个用户使用了A策略，则第2个用户只能使用B或者C策略。
对单个用户而言，不同的调度策略对系统资源的消耗可以归一化后抽象为数值。例如，某用户分别使用A/B/C策略的系统消耗分别为15/8/17。
每个用户依次选择当前所能选择的对系统资源消耗最少的策略（局部最优），如果有多个满足要求的策略，选最后一个。
输入描述
第一行表示用户个数n

接下来每一行表示一个用户分别使用三个策略的系统消耗resA resB resC

输出描述
最优策略组合下的总的系统资源消耗数

用例
输入	
3
15 8 17
12 20 9
11 7 5
输出	24
说明	1号用户使用B策略，2号用户使用C策略，3号用户使用B策略。系统资源消耗: 8 + 9 + 7 = 24。
 */

import java.util.Scanner;

/**
  * 
  局部最优解法
本题第3个条件如下：

每个用户依次选择当前所能选择的对系统资源消耗最少的策略（局部最优），如果有多个满足要求的策略，选最后一个。
其中，每个用户选择得策略，只需要满足局部最优即可，比如题目用例：

第1个用户，局部最优应该选[15, 8, 17]中最小值8

第2个用户，由于受限于相邻用户不能选相同位置得策略，因此只能选择[12, 9]中局部最优的9

第3个用户，由于受限于相邻用户不能选相同位置得策略，因此只能选择[11, 7]中局部最优的7

因此，最终总消耗为：8 + 9 + 7 = 24

因此，有了这个局部最优的条件，本题的难度大大降低了。
  */
public class 用户调度问题 {
    
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
 
        int n = sc.nextInt();
    
        int[][] res = new int[n][3];
        for (int i = 0; i < n; i++) {
        res[i][0] = sc.nextInt();
        res[i][1] = sc.nextInt();
        res[i][2] = sc.nextInt();
    }
 
    System.out.println(getResult(n, res));
  }
 
  public static int getResult(int n, int[][] res) {
    int last = -1;
    int sum = 0;
 
    for (int i = 0; i < n; i++) {
      last = getMinEleIdx(res[i], last);
      sum += res[i][last];
    }
 
    return sum;
  }
 
  public static int getMinEleIdx(int[] arr, int excludeIdx) {
    int minEleVal = Integer.MAX_VALUE;
    int minEleIdx = -1;
 
    for (int i = 0; i < arr.length; i++) {
      if (i == excludeIdx) continue;
 
      if (arr[i] <= minEleVal) {
        minEleVal = arr[i];
        minEleIdx = i;
      }
    }
 
    return minEleIdx;
  }
}
